package com.cskaoyan.javase.wrapper;

/**
 * 所有数值包装类型以及Boolean（即不包括Void，Void不能实例化）的对象，都具有以下特点：
 *      对象不可变！
 *
 * 首先要理解对象不可变，就要先搞清楚何为不可变对象
 * Java当中的不可变对象是以下定义的：
 *      某个对象一旦被创建，除非销毁它，否者对象的状态永远不可改变，这种对象就是不可变对象。
 *      但是还要注意不可变对象的状态不可变，是有具体要求的，包括：
 *          1. 对象中的基本数据类型成员变量的取值不可变。
 *          2. 对象中的引用数据类型成员变量状态不可变：
 *              1. 该引用不能指向新的对象。
 *              2. 该引用指向的对象状态也不可变。
 *
 * Java当中的不可变对象太多了，其中最典型的就是：
 * 1. String字符串对象
 * 2. 数值类型包装类型对象以及Boolean对象
 *
 * 但是这两种类型对象，实现不可变的原理虽然大体相同，但略有差异。
 * @since 21:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        /*
            String对象不可变
            指的是以下"hello"和"world"这两个对象不可变
            但是String的引用是可变的,可以指向新对象
         */
        String str = "hello";
        str = "world";

        Integer a = 120;
        test(a);
        System.out.println(a);
    }

    public static void test(Integer a) {
        // 引用指向新对象
        a = 666;
    }
}
